An important development in computer processing has been systems having more than one processor, each capable of independent action to execute applications programming. Different program tasks may be assigned to different processors, with the result that the execution time of the programming is substantially reduced. One approach to dividing tasks in a multiprocessor system is designating subprograms, which link into a main program running on a first processor, for execution by a second processor.
When designated functions are to be executed by a second processor, a problem with implementing such a division of tasks is that the processors need a means for exchanging data. The physical system requirements of transmitting data in bits, such as communications buffers and data lines, are known--the difficulty lies in the fact that a function's arguments and return values are not determined until run time. The size and type of this data determine how the data may be communicated. Thus, the communications routine must accomplish the run time exchange of values associated with the function.
Because of the difficulty in programming communications programming to solve this problem, some multiprocessor systems have a second processor whose functions are fixed. The user cannot add new functions and is limited to the functions provided with the processor.
In other multiprocessor systems, a programmer may add functions, but must either create a support routine to permit the second processor to execute the function, or use a nonstandard format when defining the function. For this reason, regardless of whether the programmer wrote his or her own function definitions or obtained pre-written function definitions from another, substantial programming effort was required to ensure that the added function would operate in the multiprocessor system.
Thus, a need exists for a multiprocessor system in which functions are extensible. The programmer should not be limited to using only a set number of functions that the second processor is capable of understanding and should be able to add functions to be executed by the second processor with a minimum of programming effort.